import {message} from 'ant-design-vue'
/**
 * 获取登录凭据
 * @returns string | null
 */
export const getToken = ():string|null => {
    return localStorage.getItem('token');
}
export const getCsrfToken = () => {
 return localStorage.getItem('csrftoken') || ''
};
/**
 * 获取登录用户本地存储信息
 * @returns 
 */
export const getUserinfo = () => {
    const userinfo = localStorage.getItem('user_info');
    if (!userinfo) {
        return null;
    }
    const userinfoData = JSON.parse(userinfo);
    return userinfoData;
}
export const getUserId = () => {
    const userinfo = getUserinfo();
    if (!userinfo) {
        return null;
    }
    return userinfo.id;
}
/**
 * 获取登录用户角色名
 * @returns 
 */
export const getUserRole = () => {
    const userinfo = getUserinfo();
    if (!userinfo) {
        return null;
    }
    return userinfo.role;
}

type PermissionType = 'create'|'update'|'delete';
/**
 *  admin 拥有所有权限，普通成员只有 create 操作
 * @param permission 权限
 * @returns boolean
 */
export const hasPermission = (permission: PermissionType):boolean => {
    // 检查是否登录
    if (!getToken()) {
        message.error('您还没有登录，无法执行任何操作！');
        return false;
    }
    const role = getUserRole();
    // 管理员拥有所有权限
    if (role === 'admin') {
        return true;
    }
    // 专家拥有有新增和更新权限，没有删除权限
    if (role === 'expert') {
        if (permission === 'create' || permission === 'update') {
            return true;
        }
        message.error('您没有权限执行该操作，专家管理员没有删除权限！');
        return false;
    }
    //专家管理员
    if (role === 'expert' && permission !== 'delete') {
        return true;
    }
    // 普通用户只有创建权限
    const isUserWithCreatePermission = role === 'user' && permission === 'create';
    if (!isUserWithCreatePermission) {
        message.error('您没有权限执行该操作，普通管理员只有新增权限！');
        return false;
    }
    return true;
};

export const getCategoryTree = (tree: Category[], id: number = 0) => { 
   // 获取无限极分类树并适配 ant-design-vue table 数据格式
   let result:Category[] = []
   tree.forEach(item => { 
    if(item.pid ===id){
        let row = {...item}
        let child = getCategoryTree(tree,item.id)
        if(child.length>0){
            row.children = child
        }
        result.push(row)
    }
   })
   return result
}

/**
 * 生成随机字符串
 * @param len 
 * @param number 
 * @returns 
 */
export const getRandom = (len?: number, number?: boolean) => {
  let chars: string = 'ABCDEFGHMNPQRSTWUXYZabcdefghmnpqrstwuxyz1234567890';
  if (number) {
      chars = '0123456789';
  }
  let maxPos: number = chars.length;
  if (!len) {
      len = 16
  }
  let hash = '';
  for (let i = 0; i < len; i++) {
      hash += chars.charAt(Math.floor(Math.random() * maxPos));
  }
  return hash
}